﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using StaticPlugin;

namespace MosWar
{
    class jAuthorization : AJob
    {
        jAuthorizationSetup setup = new jAuthorizationSetup();
        protected override int getPriority()
        {
            return -1;
        }

        protected override string getName()
        {
            return "Авторизация на moswar.ru";
        }

        private string status = "Idle";

        protected override string getStatus()
        {
            return status;
        }

        protected override bool getAvailable()
        {
            return true;
        }

        private bool BeginsWithPlayer(string s) 
        {
            if(s.TrimStart(' ').StartsWith("player=")) return true;
            return false;
        }

        private string PlayerName = "";
        private int level = -1;

        public override bool testRequirements(WebBrowser browser)
        {
            PlayerName = "";
            if (browser.Document == null) 
            {
                status = "Идем на сайт";
                return true;//Документ никакой не загружен..
            }
            if (SkillsDetector.GetUserNameAndLevel(browser, out PlayerName, out level))
            {
                status = "Имя пользователя (ник, html):" + PlayerName + ", уровень:" + level.ToString();
                return false;
            }
            status = "Проблемы с загрузкой сайта - не нашли имя персонажа";
            return true;

            //if (browser.Document.Cookie == null) 
            //{
            //    status = "Какие-то проблемы с загрузкой сайта";
            //    initActions(); // Начинаем с начала
            //    return true;
            //}
            //int m_playerName = browser.Document.Cookie.Split(';').ToList().FindIndex(BeginsWithPlayer) ;//.Find(BeginsWithPlayer);
            //if (m_playerName >= 0)
            //{
            //    PlayerName = browser.Document.Cookie.Split(';')[m_playerName].Split('=')[1];
            //    status = "Имя пользователя (ник): " + PlayerName;
            //    return false;
            //}
            //return true;
        }

        private string strLogin = "";
        private string strPasswd = "";

        public override DialogResult showSetupDialog()
        {
            setup.edLogin.Text = strLogin;
            setup.edPassword.Text = strPasswd;
            DialogResult res = setup.ShowDialog();
            if (res == DialogResult.OK) 
            {
                strLogin = setup.edLogin.Text;
                strPasswd = setup.edPassword.Text;
            }
            return res;
        }

        public override void initActions()
        {
            actions.Clear();
            actions.Add(new Action("Переход на главную страницу", LoadMainPage));
            actions.Add(new Action("Ввод логина и пароля", EnterLogin));
            actions.Add(new Action("Проверка корректности входа", CheckErrors));
        }

        #region Actions
        public void CheckErrors(WebBrowser b) 
        {
            //if (b.Url.AbsolutePath == "/") ;//TODO: Invoke error func!
        }

        public void EnterLogin(WebBrowser b)
        {
            if (b.Url.AbsoluteUri != "http://www.moswar.ru/" )
            {
                Console.WriteLine("jAuthorization.EnterLogin:: failed navigation: b.Url.AbsolutePath=" + b.Url.AbsoluteUri);
                return;
            }
            if (b.Document.Body.GetElementsByTagName("a").Count != 1) 
            {
                b.Document.GetElementById("login-email").SetAttribute("value", strLogin);
                b.Document.GetElementById("login-password").SetAttribute("value", strPasswd);
                // поиск кнопки "Войти"
                foreach (HtmlElement e in b.Document.GetElementsByTagName("button"))
                {
                    if (e.GetAttribute("type") == "submit")
                    {
                        e.InvokeMember("click");
                    }
                }
            }
        }

        public void LoadMainPage(WebBrowser b)
        {
            b.Navigate("www.moswar.ru/player");
        }

        #endregion
    }
}
